from rest_framework.views import exception_handler
from rest_framework.response import Response
from rest_framework import status
from rest_framework.exceptions import NotAuthenticated, PermissionDenied, NotFound, ValidationError, MethodNotAllowed, NotAcceptable, UnsupportedMediaType, Throttled, APIException
from django.db import DatabaseError


# 自定义异常处理程序
def custom_exception_handler(exc, context):
    # 调用默认的异常处理程序，获取默认的错误响应
    response = exception_handler(exc, context)
    
    # 判断异常是否被drf处理，如果没有被处理，返回默认的错误响应
    if response is None:
        view = context['view']
        # 异常没有被drf处理:  notAuthenticatedError 
        if isinstance(exc, DatabaseError):
            
            # 异常是数据库异常，1000:服务器错误
            return Response({
                'code': 1000,
                'message': '服务器错误!',
                'detail': str(exc)
            }, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
    else:
        # 异常被drf处理(验证错误，认证错误，资源不存在等)
        if isinstance(exc, NotAuthenticated):
            response.data = {
                'code': 1001,
                'message': '需要身份认证',
                'detail': '请登录后再访问！'
                }
        elif isinstance(exc, NotFound):
            response.data = {
                'code': 1002,
               'message': '资源不存在',
                'detail': '当前资源不存在，请联系管理员！'
                }
            
    return response
            
           
            
# 判断异常是否没有被drf处理，如果没有被处理，返回默认的错误响应
